// ==UserScript==
// @name      管理网增加按钮
// @namespace  http://apz.homepage.com/
// @version    1.0.0
// @description  管理网增加按钮
// @copyright  2023+, You
// @author       You
// @include      http://10.254.2.61:8085/corp_patenthub/guiyang_longmaster.patenthub_case_status/patenthubView*
// @icon         images/txt.png
// @require      /js/jquery-3.4.1.js
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_xmlhttpRequest
// @connect     10.254.2.61
// @grant       GM_setValueFromScript
// @grant       GM_getValueFromScript 
// ==/UserScript==
// @include：@include 指令用于指定匹配网址的规则。你可以使用通配符 * 匹配部分 URL，或使用正则表达式来匹配特定的页面。
// 例如，@include https://example.com/* 将匹配以 "https://example.com/" 开头的所有网址，而 @include /^https?:\/\/(www\.)?example\.com/ 
// 将匹配所有以 "https://" 或 "http://" 开头、以 "example.com" 结尾的网址。
// @match：@match 指令也用于指定匹配网址的规则，它支持更丰富的匹配模式。@match 使用通配符语法来匹配 URL，其中 * 可以匹配任意字符（除了 /），** 可以匹配任意字符（包括 /）。
//例如，@match https://example.com/* 和 @match *://example.com/* 都将匹配以 "https://example.com/" 开头的所有网址。
//@match https://**.example.com/* 将匹配以 "https://" 开头，以 ".example.com/" 结尾的所有网址。
//https://api.cponline.cnipa.gov.cn/zljffw/fycx/yjfywbl/listyjf-batchhdpage,{zhuanlisqhs: ["2017106745492"], size: 10, current: 1}

(function () {
    // 需要查询的专利列表
    let patentBuyList = [{patentid:'2019110050048'},{patentid:'2014107234471'},{patentid:'2021114837007'}];
    // let patentBuyList = [];
    let page = 1;
    let limit = 10;
    const listUrl = "http://10.254.2.61:8085/api/Payment/GetpaymentList"
    const ClearQueueListUrl = "http://10.254.2.61:8085/api/Payment/ClearQueueList"

    const ClearQueueList = (urlGet) => {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                // url: "http://10.254.2.61:8085/api/Aborablemonkey/GetPayFee",
                // "http://10.254.2.61:8085/api/Payment/GetpaymentList",
                url: urlGet,
                method: "POST",
                headers: {
                    "Content-type": "application/x-www-form-urlencode;charset=utf-8"
                },
                data: "data=0",
                onload: function (response) {
                    console.log("-----", response.responseText);
                    if ("no access" == response.responseText.trim()) {
                        window.alert("数据列表获取需要先登录...")
                        return;
                    }
                    const ret = JSON.parse(response.responseText)
                    if (ret.code == 1) {
                        console.log("请求成功:", ret.data)
                        // patentBuyList = ret.data
                        resolve(ret.data);
                        // resolve(patentBuyList);
                    } else {
                        reject("fail");
                    }
                },
                onerror: function (response) {
                    console.log("请求失败", response)
                }
            })
        })
    }


    const httpGetList = (urlGet, pPage, pLimit) => {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                // url: "http://10.254.2.61:8085/api/Aborablemonkey/GetPayFee",
                // "http://10.254.2.61:8085/api/Payment/GetpaymentList",
                url: urlGet,
                method: "POST",
                headers: {
                    "Content-type": "application/x-www-form-urlencode;charset=utf-8"
                },
                data: "page=" + pPage + "&limit=" + pLimit,
                onload: function (response) {
                    const ret = JSON.parse(response.responseText)
                    if (ret.code == 1) {
                        console.log("请求成功:", ret.data)
                        resolve(ret.data);
                    } else {
                        reject("fail");
                    }
                },
                onerror: function (response) {
                    console.log("请求失败", response)
                }
            })
        })
    }

    const tmValue = 1000
    Date.prototype.format = function (fmt) {
        var o = {
            "M+": this.getMonth() + 1,                 //月份
            "d+": this.getDate(),                    //日
            "h+": this.getHours(),                   //小时
            "m+": this.getMinutes(),                 //分
            "s+": this.getSeconds(),                 //秒
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
            "S": this.getMilliseconds()             //毫秒
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            }
        }
        return fmt;
    };

    const initInputDomProto = () => {
        let input = document.querySelector('input');
        let descriper = Object.getOwnPropertyDescriptor(input.__proto__, 'value');
        //取出原先的get和set函数
        let getValue = descriper.get;
        let setValue = descriper.set;
        Object.defineProperty(
            input.__proto__,
            'value',
            {
                configurable: true,
                enumerable: true,
                get: function () {
                    return getValue.call(this);
                },
                // 重写set方法
                set: function () {
                    //console.log('value发生变化',arguments);
                    // 加入通知代码
                    setValue.call(this, ...arguments);
                    //this.focus()
                    this.dispatchEvent(new InputEvent("input"))
                    // this.dispatchEvent(new InputEvent("change"))
                    //this.blur()
                }
            })
    }
    

    var run = function () {
        var fm = $('#layui-layer2 .layui-layer-content .layui-form .layui-form-item')
        // console.log("fm:",fm);
        if ($("form").length > 0) {
            initInputDomProto()
            $('.layui-form-item')[0].innerHTML=$('.layui-form-item')[0].innerHTML+'<button class="layui-layer-btn0" id="start_auto">启动自动查询</button>';
            return true
        } else {
            return false
        }
    }
    var tt = setInterval(function () {
        if (run()) {
            $("#start_auto").on('click',function (el){
                
                let patInp = $('.layui-form')[1][0].value.replace(".","");
                if(patInp.length == 0){
                    alert('专利申请号需要输入');
                    return;
                }
                window.open("https://cpquery.cponline.cnipa.gov.cn/chinesepatent/index");
                GM_setValueFromScript("pat_manage", "管理网站", "manager-"+patInp);
                const tt3 = setInterval(() => {
                    GM_getValueFromScript("pat_waitEnd", "管理网站").then((value)=>{
                        if(value == "waitEnd"){
                            
                            console.log('信息接收成功!')
                            let recvDat = [];
                                                //申请人
                            recvDat.push(GM_getValueFromScript("pat_applicant", "管理网站"));
                            // 发明名称
                            recvDat.push(GM_getValueFromScript("pat_name", "管理网站"));
                            // 专利类型
                            recvDat.push(GM_getValueFromScript("pat_type", "管理网站"));
                            // 申请日
                            recvDat.push(GM_getValueFromScript("applicantDt", "管理网站")); 
                            // 法律状态
                            recvDat.push(GM_getValueFromScript("falvStatus", "管理网站")); 
                            // 公告日
                            recvDat.push(GM_getValueFromScript("announcementDt", "管理网站")); 

                            Promise.all(recvDat).then((ret)=>{
                                console.log('回复pat_waitEnd = ok:');                             
                                console.log('数据:',ret);

                                setTimeout(()=>{
                                    GM_setValueFromScript("pat_waitEnd", "管理网站", "ok");
                                },1000);
                                
                                // 专利名称
                                $('.layui-form')[1][2].value=ret[1];
                                // 申请公司
                                $('.layui-form')[1][3].value=ret[0];
                                // 备注
                                $('.layui-form')[1][4].value='新增用于缴费';
                                //申请日
                                $('.layui-form')[1][7].value=ret[3];
                                //授权公告日
                                $('.layui-form')[1][8].value=ret[5];
                                if(ret[2].match('发明')){
                                    $('#select_patenthub_type select')[0].selectedIndex=1
                                }
                                GM_setValueFromScript("pat_manage", "管理网站", "end-000");                       
                                
                            }).catch((err)=>{console.log(err)});
                            
                            clearInterval(tt3);
                        }else{
                            console.log('wating 等待从国知局获取信息');
                        }
                    }).catch((err)=>{clearInterval(tt3);console.log(err)});
                }, 1000);    
            });
            clearInterval(tt)
        }
    }, tmValue);

    chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
        // 判断消息内容
        // 在控制台打印收到的消息
        console.log("收到背景页发送的:", message);
    });
})()
